<?php
ini_set("memory_limit",-1);

require_once(LIB_PATH.'phpMailer/class.phpmailer.php');

/**
 * @package   auto_occasion
 * @subpackage 
 * @author    CMS
 * @copyright 2011
 * @license    All rights reserved
 **/

class annonceSrv {
    
    /**
     * Fonction pour rechercher une annonce
     * @param object $critere
     */
    public function recherche($critere, $_iDebutListe, $_iParPage){
        $tResult     = array();

        jClasses::inc('commun~communSrv');

        $sql  = " SELECT ";
        // $sql .= " SQL_CALC_FOUND_ROWS ";
        $sql .= " IdOccasion ,";
        $sql .= " Occas_Reference ,";
        $sql .= " Occas_Version ,";
        $sql .= " Occas_Millesime ,";
        $sql .= " DATE_FORMAT(Vendeur_Naissance, '%d/%m/%Y') as Vendeur_Naissance ,";
        $sql .= " CONCAT(Vendeur_Nom, ' ', Vendeur_Prenom) as Vendeur_Nom,";
        $sql .= " Occas_NumImmatricul ,";
        $sql .= " if(Occas_Valide='2', 'archivee', if(Occas_Valide='3', 'supprimee', '')) as Occas_Valide,";
        $sql .= " DATE_FORMAT(Occas_DateSaisie, '%d/%m/%Y') as Occas_DateSaisie";
        $sql .= " FROM ao_voiture_occasion VO";
        $sql .= " INNER JOIN ao_vendeur V ON V.IdVendeur = VO.Occas_Vendeur";
        $sql .= " LEFT JOIN ao_partenaire P ON P.IdPartenaire = VO.Occas_Partenaire";
        $sql .= " WHERE ";
        $sql .= " Occas_Estsaisie = '1' ";
        
        if ($critere->vendeur) {
            $sql .= " AND  (V.Vendeur_Nom LIKE '%" .$critere->vendeur."%' OR Vendeur_Prenom LIKE '%".$critere->vendeur."%') ";
        }
        if ($critere->email) {
            $sql .= " AND V.Vendeur_Email LIKE '%" .$critere->email ."%' ";

        }
        if ($critere->immatriculation) {
            $sql .= " AND VO.Occas_NumImmatricul LIKE '%" .$critere->immatriculation ."%' ";

        }
        if ($critere->code_partenaire) {
           $sql .= " AND P.Part_Code LIKE '%" .$critere->code_partenaire ."%' ";

        }
        if ($critere->reference) {
            $sql .= " AND VO.Occas_Reference LIKE '%" .$critere->reference ."%' ";
        }
        // TODO : à confirmer
        if ($critere->id_occasion) {
            $sql .= " AND VO.IdOccasion LIKE '%" .$critere->id_occasion ."%' ";
        }

        if ($critere->parution) {
            $sql .= " AND SUBSTRING(SUBSTRING_INDEX(Occas_Reference,'-',-2),3,1) = '".$critere->parution."' ";
        }

        if ($critere->naissance1) {
            $sql .= " AND  '" .communSrv::toDateSql($critere->naissance1)."'<= V.Vendeur_Naissance";
        }
        if ($critere->naissance2) {
            $sql .= " AND  '" .communSrv::toDateSql($critere->naissance2)."'>= V.Vendeur_Naissance";
        }
        if ($critere->modif1) {
            $sql .= " AND  '" .communSrv::toDateSql($critere->modif1)."'>= VO.Occas_DateModif ";
        }
        if ($critere->modif2) {
            $sql .= " AND  '" .communSrv::toDateSql($critere->modif2)."'<= VO.Occas_DateModif ";
        }

        if (isset($critere->type)) {
            switch ($critere->type) {
                
                case ANNONCE_A_VALIDER:
                    $sql .= " AND Occas_Valide = '0'
                        AND (( Occas_Estpaye <> '0' AND  Occas_TypePaiement <> 'g' ) OR Occas_TypePaiement = 'g')
                        AND Occas_DateModif = '0000-00-00'
                        ";
                    break;

                case ANNONCE_A_CONTROLER:
                    $sql .= " AND Occas_Valide = '0'
                        AND Occas_DateModif <> '0000-00-00'
                        ";
                    break;

                case ANNONCE_EN_LIGNE:
                    $sql .= " AND Occas_Valide = '".ANNONCE_ETAT_EN_LIGNE."'
                        ";
                    break;

                case ANNONCE_ARCHIVEES:
                    $sql .= " AND Occas_Valide = '".ANNONCE_ETAT_ARCHIVEES."'
                        ";
                    break;

                case ANNONCE_SUPPRIMEES:
                    $sql .= " AND Occas_Valide = '".ANNONCE_ETAT_SUPPRIMEES."'
                        ";
                    break;

                case ANNONCE_PAYEES_NON_VALIDE:
                    $sql .= " AND Occas_Valide = '".ANNONCE_ETAT_NON_VALIDE."'
                    
                    AND Occas_Estpaye = '".ANNONCE_ETAT_PAYEE."'
                    AND Occas_Partenaire = '0' ";
                    break;

                case ANNONCE_NON_PAYEES_VALIDE:
                    $sql .= " AND Occas_Valide = '".ANNONCE_ETAT_VALIDE."'
                    
                    AND Occas_Estpaye = '".ANNONCE_ETAT_NON_PAYEE."'
                    AND Occas_Partenaire = '0' ";
                    break;

                case ANNONCE_NON_VALIDE:
                    $sql .= " AND Occas_Valide = '".ANNONCE_ETAT_NON_VALIDE."'
                    
                    AND Occas_Partenaire = '0' ";
                    break;
            }
        }
        $sql .= " ORDER BY Occas_DateSaisie DESC, Occas_DateModif DESC ";
        $sql .= " LIMIT  500";

        $jdb                    = jDb::getDbWidget();
        $tResult['annonce']     = $jdb->fetchAll($sql);
        $iSize                  = sizeof($tResult['annonce']);
        $tResult['annonce']     = array_slice($tResult['annonce'], $_iDebutListe, $_iParPage);
        $tResult['nbRecords']   = $iSize;
        
        return $tResult;

    }

    /**
     * Fonction pour rechercher une annonce à partir du front
     * @param object $critere
     */
    public function search($critere, $_iDebutListe, $_iParPage=20, $_order = 'Occas_Prix'){

        $tResult      = array();
        $poleposition = false;

        jClasses::inc('commun~communSrv');

        $sql  = " SELECT ";
        $sql .= " IdOccasion ,";
        if ($critere->video) {
            $sql .= " annonce_video ,";
        }
        if ($critere->carbu) {
            $sql .= " CARBU.name ,";
        }
        $sql .= " Occas_Marque ,";
        $sql .= " Occas_Modele ,";
        $sql .= " departement_nom ,";
        $sql .= " departement_num ,";
        $sql .= " Occas_Departement ,";
        $sql .= " SUBSTRING(departement_nom,1,2) as dept,";
        $sql .= " Occas_Partenaire ,";
        $sql .= " Occas_Version,";
        $sql .= " Occas_Prix ,";
        $sql .= " Occas_Kilometrage ,";
        $sql .= " Occas_Millesime ,";
        $sql .= " photo_name, marque_logo, ";
        $sql .= " modele_libelle ,";
        $sql .= " marque_libelle {_POLE_POSITION_}";
        $sql .= " FROM ao_voiture_occasion VO";
        
        $sql .= " LEFT JOIN ao_marque M ON M.marque_id = VO.Occas_Marque";
        $sql .= " LEFT JOIN ao_modele MO ON MO.modele_id = VO.Occas_Modele";
        $sql .= " LEFT JOIN ao_departement D ON D.departement_id = VO.Occas_Departement";
        $sql .= " LEFT JOIN ao_photo_annonce P ON P.annonce_id = VO.IdOccasion";
        $sql .= " LEFT JOIN ao_photo PH ON PH.photo_id = P.photo_id";
        if ($critere->cat) {
            $sql .= " LEFT JOIN ao_essais ON ao_essais.ess_iMarqueId = VO.Occas_Marque";
            $sql .= " LEFT JOIN ao_categorie_voitures CTGV ON ao_essais.ess_iCatId = CTGV.catV_id";
        }
        if ($critere->carbu) {
            $sql .= " LEFT JOIN ao_carburation CARBU ON CARBU.id = VO.Occas_Carburation";
        }

        if ($critere->vendeur)
            $sql .= " LEFT JOIN ao_vendeur VE ON VE.IdVendeur = VO.Occas_Vendeur";
        if ($critere->ville) {
            $sql .= " LEFT JOIN ao_vendeur VE ON VE.IdVendeur = VO.Occas_Vendeur ";
        }
        $sql .= " WHERE Occas_Estsaisie = '1' AND Occas_Valide = '1' ";
        
        if ($critere->region) {
            $poleposition = false;
            $sql .= " AND  D.region LIKE '%" .$critere->region."%' ";
        }
        if ($critere->ville) {
            $poleposition = false;
            $sql .= " AND  VE.Vendeur_Ville LIKE '%" .$critere->ville."%' ";
        }
        if ($critere->marqueId) {
            $poleposition = true;
            $sql .= " AND VO.Occas_Marque =" .$critere->marqueId ;
        }
        if ($critere->modeleId) {
            $poleposition = true;
            $sql .= " AND VO.Occas_Modele =" .$critere->modeleId ;

        }
        if ($critere->prix) {
            $poleposition = false;
           $sql .= " AND VO.Occas_Prix =" .$critere->prix ;

        }
        if ($critere->version) {
            $poleposition = false;
            $sql .= " AND  VO.Occas_Version LIKE '%" .$critere->version."%' ";
        }
        if ($critere->cat) {
            $poleposition = false;
           $sql .= " AND CTGV.catV_zLibelle LIKE '%" .$critere->cat."%' ";
        }
        if ($critere->carbu) {
            $poleposition = false;
            $sql .= " AND  CARBU.name LIKE '%" .$critere->carbu."%' ";
        }
        if ($critere->porte) {
            $poleposition = false;
           $sql .= " AND VO.Occas_NbPorte =" .$critere->porte ;
        }
        if ($critere->annee) {
            $poleposition = false;
           $sql .= " AND VO.Occas_Millesime = '" .$critere->annee ."'";
        }
        if ($critere->km) {
            $poleposition = false;
           $sql .= " AND VO.Occas_Kilometrage =" .$critere->km ;
        }
        if ($critere->vitesseId) {
            $poleposition = false;
           $sql .= " AND VO.Occas_Bt_Vitesse = '" .$critere->vitesseId ."'";
        }
        if ($critere->dept) {
            $poleposition = false;
            $sql .= " AND D.departement_num = '" . $critere->dept."'";
        }
        if ($critere->vendeur && $critere->vendeur == '2') {
            $poleposition = false;
            $sql .= " AND VO.Occas_Vendeur_Pro <> '' AND VO.Occas_Vendeur_Pro IS NOT NULL ";
        }
        if ($critere->vendeur && $critere->vendeur == '1') {
            $poleposition = false;
            $sql .= " AND (VO.Occas_Vendeur_Pro = '' OR  VO.Occas_Vendeur_Pro IS  NULL )";
        }
        if ($critere->image) {
            $poleposition = false;
            $sql .= " AND PH.photo_name <> '' ";
        }
        
        if ($critere->video) {
            $poleposition = false;
            $sql .= " AND VO.annonce_video <> '' AND VO.annonce_video IS NOT NULL";
        }
        
        if ($critere->main) {
            $poleposition = false;
            $sql .= " AND VO.Occas_Premieremain = 1";
        }
        if ($critere->garantie) {
            $poleposition = false;
            $sql .= " AND VO.Occas_Garantie <> '0000-00-00' AND VO.Occas_Garantie <> ''  AND VO.Occas_Garantie IS NOT NULL";
        }

        if (sizeof($critere->motCleUrne) > 1) {
            $sql .= " AND ( VO.Occas_Version ";
            foreach ($critere->motCleUrne as $k=>$urne) {
                $sep  = (!$k) ? " " : " OR VO.Occas_Version ";
                $sql .= $sep . " LIKE '%" .$urne."%' ";
            }
            $sql .= ") ";
        } else if ($critere->motcle) {
            $poleposition = false;
            $sql .= " AND VO.Occas_Version LIKE '%" .$critere->motcle."%' ";
        }
        if ($critere->lMarque) {
            $poleposition = false;
            $sql .= " AND M.marque_libelle LIKE '%" .$critere->lMarque."%' ";
        }
        if ($critere->lModele) {
            $poleposition = false;
            $sql .= " AND MO.modele_libelle LIKE '%" .$critere->lModele."%' ";
        }
        if ($critere->limit && $critere->doIt) { 
            $_iParPage = $critere->limit;
        }

        $sql .= " GROUP BY VO.IdOccasion";
        $ppstion = "";
        if ($poleposition) {
            $sqlPolePosition = " ,(SELECT a_o_f.idOccasion FROM ao_annonce_formule a_o_f WHERE (a_o_f.idOption LIKE '%".OPTION_POLEPOSITION."%'  OR a_o_f.idOption LIKE '%".OPTION_PACK."%' ) AND a_o_f.idOccasion = VO.IdOccasion LIMIT 1) as ppos ";
            $sql = str_replace("{_POLE_POSITION_}", $sqlPolePosition, $sql);
            // $critere->order = "ppos";
            $ppstion = "ppos";
        } else {
            $sql = str_replace("{_POLE_POSITION_}", "", $sql);
        }
        if($critere->order != '' || $ppstion) {
            switch($critere->order) {
                case 'p' : $field = 'Occas_Prix ' . $critere->sort_;break;
                case 'k' : $field = 'Occas_Kilometrage ' . $critere->sort_ ;break;
                case 'a' : $field = 'Occas_Millesime ' . $critere->sort_;break;
                case 'd' : $field = 'departement_num ' . $critere->sort_;break;
                case 'v' : $field = 'Occas_Vendeur_Pro ' . $critere->sort_;break;
                case 'mark' : $field = 'marque_libelle ' . $critere->sort_;break;
                // case 'ppos' : $field = $critere->order . ' DESC, Occas_DateSaisie DESC';break;
                default  : $field = 'Occas_Prix';
            }
            if ($ppstion) {
                $tempF = " ppos DESC , " . $field;
                $field = $tempF;
            }
            $sql .= " ORDER BY $field";
        } elseif ($critere->doIt) {
            $sql .= " ORDER BY Occas_DateSaisie DESC, Occas_DateModif DESC";
        } else {
            $sql .= " ORDER BY $_order ASC, Occas_DateSaisie DESC, Occas_DateModif DESC";
        }
         if (!$critere->limit) {

            $sql .= " LIMIT  500";
         } else {
            $sql .= " LIMIT $critere->limit";
         }

        $jdb                    = jDb::getDbWidget();
        $tResult['annonce']     = $jdb->fetchAll($sql);
        $iSize                  = sizeof($tResult['annonce']);

        $tResult['annonce']     = array_slice($tResult['annonce'], $_iDebutListe, $_iParPage);
        $tResult['nbRecords']   = $iSize;
        $tResult['query']       = $sql;
        return $tResult;

    }

    /**
     * Vérifie si une annonce a comme option : pole position, et place l'annonce en tête de liste lors de l'affichage
     *
     * @param array $advert
     *
     * @return array
     */
    public function checkIfPolePosition($advert){
        $advertIdWithPolePosition = self::advertpolePosition();
        $first = $last = array();
        foreach ($advert as $item) {
            if (in_array($item->IdOccasion, $advertIdWithPolePosition)) {
                $first[] = $item;
            } else {
                $last[] = $item;
            }
        }

        return $ret;
    }

    /**
     * Liste des ids d'annonce avec l'option : pole position
     *
     * @return array
     */
    public function advertpolePosition(){

        $cnx = jDb::getConnection();

        jClasses::inc('commun~communSrv');

        $sql          = " SELECT idOccasion FROM ao_annonce_formule WHERE idOption LIKE '%".OPTION_POLEPOSITION."%'";
        $rs     = $cnx->query($sql);
        $res = array();
        while ($row = $rs->fetch()) {
             $res[] = $row->idOccasion;
        }

        return $res;
    }

    /**
     * Vérifie la validité d'une annonce
     *
     * @param $_id : id de l'annonce
     * @return boolean 
     */
    public function checkIfValideOrNot($_id){

        $cnx = jDb::getConnection();
        $sql = " SELECT Occas_Valide FROM ao_voiture_occasion WHERE IdOccasion = $_id  ";
        $rs  = $cnx->query($sql);
        $row = $rs->fetch();
		if ($row->Occas_Valide=='1') {
			return true ;
		}else {
			return false ;
		}
    }


     /**
    * LIste des provenances d'une annonce
    */
    public function listeDetail(){
        // instanciation de la factory
        $maFactory = jDao::get("commun~ao_voiture_occasion");

        $records = $maFactory->listeDetail();

        return $records->fetchAll();
    }

    

    /**
     * Fonction permettant d'ajouter une annonce
     * @return
     *
     */
    public function getFormuleOptionDatas ($datas, $anonceId) {
        jClasses::inc('commun~common');
        $params = explode('#', $datas);
        if(sizeof($params)){
            foreach ($params as $item) {
                $formuleData = explode("_", $item);;
                $annonce = common::init('ao_annonce_formuleoption');
                $annonce->annonce_id    = $anonceId;
                $annonce->formch_id     = $formuleData[1];
                $annonce->option_value  = $formuleData[0];
                self::saveAnnonceFormuleOption($annonce);
            }
        }
        

    }

    /**
     * Fonction permettant d'ajouter une annonce
     * @return
     *
     */
    public static function saveAnnonceFormuleOption ($annonce) {

        // instanciation de la factory
        $maFactory = jDao::get("commun~ao_annonce_formuleoption");
        $records   = jDao::createRecord("commun~ao_annonce_formuleoption");

        $records->annonce_id        = $annonce->annonce_id;
        $records->formch_id         = $annonce->formch_id;
        $records->option_value      = $annonce->option_value;
        

        return $maFactory->insert($records);
    }

    /**
     * désactive en masse les annonces
     *
     */
     public function updateStatus ($annoncesId, $status = ANNONCE_ETAT_SUPPRIMEES) {
        if ($annoncesId) {
             $sql = " UPDATE ao_voiture_occasion SET Occas_Valide ='".$status."' WHERE IdOccasion IN ($annoncesId)";
             $cnx = jDb::getConnection();
             $cnx->exec($sql);
        }
     }

    /**
     * page de confirmation, l’annonce est à l'état valide=0. Si la formule est gratuite, l’annonce est à l'état estPaye=1 et estSaisie=0.
     *
     * Après avoir cliqué sur le lien du mail, le vendeur tombe sur la page validation. L’annonce reste à l'état valide=0, 
		mais passe à estPayee=1 (puisque c’est la page de confirmation de paiement), estSaisie=1.
     */
     public function confirmAddAdvert ($idOccasion, $valide, $saisie, $paye) {

         $sql = " UPDATE ao_voiture_occasion SET Occas_Valide ='".$valide."', Occas_Estsaisie ='".$saisie."',Occas_Estpaye ='".$paye."' WHERE IdOccasion IN ($idOccasion)";
         $cnx = jDb::getConnection();
         $cnx->exec($sql);
     }


    /**
     * Retourne le nombre d'annonce à valider
     * @return int
     */
     public function countAnnonceAValider () {

         $sql = " SELECT COUNT(*) AS Nb
                    FROM ao_voiture_occasion 
                    WHERE Occas_Valide = '0'
                        AND (( Occas_Estpaye <> '0' AND  Occas_TypePaiement <> 'g' ) OR Occas_TypePaiement = 'g')
                        AND Occas_DateModif = '0000-00-00'
                        AND Occas_Estsaisie = '1'";
         $jdb = jDb::getDbWidget();
         return $jdb->fetchFirst($sql)->Nb;
     }

    /**
     * Retourne le nombre d'annonce à controler
     * @return int
     */
     public function countAnnonceAControler () {

         $sql = " SELECT COUNT(*) AS Nb
                    FROM ao_voiture_occasion
                    WHERE Occas_Valide = '0'
                        AND Occas_DateModif <> '0000-00-00'
                        AND Occas_Estsaisie = '1'";
         $jdb = jDb::getDbWidget();

         return $jdb->fetchFirst($sql)->Nb;
     }



    /**
     * Retourne le nombre d'essais
     * @return int $limit
     */
     public function getLastEssais ($limit) {

         $sql  = " SELECT * FROM ao_essais ";
         $sql .= " INNER JOIN ao_marque ON ao_marque.marque_id = ao_essais.ess_iMarqueId";
         $sql .= " INNER JOIN ao_modele ON ao_modele.modele_id = ao_essais.ess_iModelId";
         $sql .= " ORDER BY ao_essais.ess_id DESC LIMIT $limit ";
         $jdb = jDb::getDbWidget();

         return $jdb->fetchAll($sql);
     }

    /**
     * Retourne le mail des vendeurs 
     * correspondant aux ids d'annonces
     *
     * @param strind $idOccasion
     * @return array
     */
     public function getVendeurMailByAdvertId ($idOccasion) {
         $cnx = jDb::getConnection();

         $sql  = " SELECT Vendeur_Email FROM ao_vendeur ";
         $sql .= " INNER JOIN ao_voiture_occasion ON ao_voiture_occasion.Occas_Vendeur = ao_vendeur.IdVendeur";
         $sql .= " WHERE Vendeur_Email IS NOT NULL AND Vendeur_Email <> '' ";

         $rs     = $cnx->query($sql);


         $res = array();
         while ($row = $rs->fetch()) {
             if (filter_var($row->Vendeur_Email, FILTER_VALIDATE_EMAIL)) {
                $res[] = $row->Vendeur_Email;
             }
         }

         return $res;
     }

    /**
     * Retourne le nombre d'annonce non payée valide / payée non valide
     * @return int
     */
     public function countAnnonceByPriceAndStates($payee, $valide, $showPayee=true) {

         $query = ($showPayee)? " AND Occas_Estpaye = '".$payee."'" : "";
         $sql = " SELECT COUNT(*) AS Nb
                    FROM ao_voiture_occasion
                    WHERE Occas_Valide = '".$valide."'
                    AND Occas_Estsaisie = '1'
                    $query
                    AND Occas_Partenaire = '0' ";
         $jdb = jDb::getDbWidget();

         return $jdb->fetchFirst($sql)->Nb;
     }

    /**
     * Retourne le nombre d'annonce seleon le parametre(eb ligne, archivée, supprimée ...)
     * @return int
     */
     public function countAnnonce ($etat) {
         $sql = " SELECT COUNT(*) AS Nb
                    FROM ao_voiture_occasion
                    WHERE Occas_Valide = '".$etat."'
                        AND Occas_Estsaisie = '".ANNONCE_EST_SAISIE."' GROUP BY Occas_Valide";
         $jdb = jDb::getDbWidget();

         return (isset($jdb->fetchFirst($sql)->Nb)) ? $jdb->fetchFirst($sql)->Nb : 0;
     }

    /**
     * Fonction pour avoir une requête d'ajout d'équipement dans table ao_annonce_equipement_choix  
     * @param int $idAnnonce
    */
    public static function deleteEquipementAnnonce($idAnnonce){

            $cnx = jDb::getConnection();
            $sqlDelete ="DELETE FROM ao_annonce_equipement_choix WHERE id_annonce =". $idAnnonce;
            $cnx->exec($sqlDelete);
    }

      /**
     * Fonction pour avoir une requête d'ajout d'équipement dans table ao_annonce_equipement_choix  
     * @param int $idAnnonce
     * @param array $idEquipement
    */
    public static function insertAnnonceEquipment($idAnnonce,$idEquipement){

            $cnx = jDb::getConnection();
            $sqlInsert = "";
            if(sizeof($idEquipement)){
            foreach ($idEquipement as $key => $value) {
                $sep = ($key == 0)? "INSERT INTO ao_annonce_equipement_choix (id_annonce,id_equipement) VALUES " : ",";
                $sqlInsert .= $sep . "($idAnnonce,$value)";
            }
            }
            $cnx->exec($sqlInsert);
            
    }

      /**
     * Fonction retournant les choix   
     * @param int $idAnnonce
     * @param array $idChoix
    */
    public static function getEquipmentChoix($idChoix){
            $choix = array();
            if (sizeof($idChoix)){
                foreach ($idChoix as $key => $item) {
                    if($item<>''){
                        array_push($choix,$item);
                    }
                }

            }
            return $choix;

    }

    /**
     * Fonction pour avoir une requête d'ajout de choix et équipement  dans table ao_annonce_equipement_choix  
     * @param int $idAnnonce
     * @param array $idChoix
    */
    public static function insertAnnonceEquipmentChoix($idAnnonce, $choix){
            $cnx = jDb::getConnection();
            $sqlInsert = "INSERT INTO ao_annonce_equipement_choix (id_annonce,id_equipement,id_choix ) VALUES ";
            foreach($choix as $k=>$itemChoix){
                $value = explode("_", $itemChoix);
                $sep = (!$k)? "": ",";
                $sqlInsert .= $sep."($idAnnonce,$value[1],$value[0])";
            }

            $cnx->exec($sqlInsert);
    }

      /**
     * Fonction permettant de retourner l'Id d'un vendeur 
     * @param array $vendeur
    */
    public static function getVendeurId($annonce){
        $cnx = jDb::getConnection();
        if($annonce->vendeur_id == 0){
            $sql = "INSERT INTO ao_vendeur (Vendeur_Civilite,Vendeur_Nom,Vendeur_Prenom,Vendeur_Naissance,
                      Vendeur_Adresse, Vendeur_CP, Vendeur_Ville, Vendeur_Transfert, Vendeur_Tel_Dom, 
                      Vendeur_Tel_Bureau,Vendeur_Tel_Port, Vendeur_Email, quandMeJoindre,Vendeur_Adresse_Ip,Vendeur_Localisation_Ip ) 
                      VALUES (  '".$annonce->vendeur_civilite. "','".$annonce->vendeur_nom. "',
                      '".$annonce->vendeur_prenom. "','".$annonce->vendeur_naissance. "','".$annonce->vendeur_adresse. "',
                      '".$annonce->vendeur_cp. "','".$annonce->vendeur_ville. "','".$annonce->vendeur_transfert. "',
                      '".$annonce->vendeur_tel_dom. "','".$annonce->vendeur_tel_bureau. "','".$annonce->vendeur_tel_por. "', 
                      '".$annonce->vendeur_email. "', 
                      '".$annonce->quandMeJoindre. "',
                      '".$annonce->Vendeur_Adresse_Ip. "',
                      '".$annonce->Vendeur_Localisation_Ip. "')";
            
            $cnx->exec($sql);
            $rs2 = $cnx->query("select IdVendeur from ao_vendeur order by IdVendeur desc limit 1");
            $row2 = $rs2->fetchAll();
            $id = $row2[0]->IdVendeur;
            
             return $id;
        } else {
            $sql = "UPDATE ao_vendeur 
                    SET Vendeur_Civilite = '".$annonce->vendeur_civilite. "',
                        Vendeur_Nom = '".$annonce->vendeur_nom. "',
                        Vendeur_Prenom = '".$annonce->vendeur_prenom. "',
                        Vendeur_Naissance = '".$annonce->vendeur_naissance. "',
                        Vendeur_Adresse = '".$annonce->vendeur_adresse. "',
                        Vendeur_CP = '".$annonce->vendeur_cp. "',
                        Vendeur_Ville = '".$annonce->vendeur_ville. "',
                        Vendeur_Transfert = '".$annonce->vendeur_transfert. "',
                        Vendeur_Tel_Dom = '".$annonce->vendeur_tel_dom. "',
                        Vendeur_Tel_Bureau  = '".$annonce->vendeur_tel_bureau. "',
                        Vendeur_Tel_Port = '".$annonce->vendeur_tel_por. "', 
                        quandMeJoindre = '".$annonce->quandMeJoindre. "', 
                        Vendeur_Email = '".$annonce->vendeur_email. "'
                    WHERE IdVendeur = " . $annonce->vendeur_id;
             $cnx->exec($sql);
             return $annonce->vendeur_id;
        }
             
    }

    /*
     * Fonction pour generer idOccasion
     */
    public static function genererIdOccasion(){
        $cnx = jDb::getConnection();
        $rs = $cnx->query("select MAX(IdOccasion) AS id from ao_voiture_occasion ");
        $row = $rs->fetchAll();
        return (($row[0]->id) + 1);
    }

    /**
     * Fonction permettant d'insérer annonce_id, vendeur_id dans table ao_voiture_occasion
    */
    public static function insertOrUpdateVoitureOccasion($annonce){
        
        $cnx = jDb::getConnection();
        $sql = "";
        if(($annonce->idOccasion) == 0){
            $idOccasion = self::genererIdOccasion();
            $sql = "  INSERT INTO ao_voiture_occasion (IdOccasion,Occas_Vendeur,Occas_Pays,Occas_Departement,Occas_NumImmatricul, Occas_Estsaisie,
                        Occas_DateSaisie,
                        Occas_Groupe,
                        Occas_Marque,
                        Occas_Modele,
                        Occas_Version,
                        Occas_Carburation,
                        Occas_Prix,
                        Occas_Adebattre,
                        Occas_MiseCirculation,
                        Occas_Millesime,
                        Occas_Kilometrage,
                        Occas_Kilom_Moteur,
                        Occas_Couleur,
                        Occas_Coul_Metal,
                        Occas_ChevFisc,
                        Occas_NbPorte,
                        Occas_Bt_Vitesse,
                        Occas_Premieremain,
                        Occas_CT,
                        Occas_Garantie,
                        Occas_Partenaire,
                        Occas_Fimage, 
                        Occas_Reference,
                        Occas_Opt_Parution,
                        Occas_TypePaiement,
                        Occas_Valide,
                        Occas_Montantpaye, annonce_video, Occas_Operateur,Occas_AffPart ";
                        $op = (isset($annonce->operateur)) ? $annonce->operateur : "";
            if(isset($annonce->Occas_Commentaire)) $sql .= ',Occas_Commentaire';
            $sql   .=") 
                        VALUES (    '".$idOccasion. "',
                                    '".$annonce->vendeur_id. "',
                                    '".$annonce->vendeur_pays. "',
                                    '".$annonce->vendeur_departement. "',
                                    '".$annonce->vendeur_immatriculation. "',
                                    '1',NOW(),
                                    '".$annonce->Occas_Groupe."',
                                    '".$annonce->Occas_Marque."',
                                    '".$annonce->Occas_Modele."',
                                    '".$annonce->Occas_Version."',
                                    '".$annonce->Occas_Carburation."',
                                    '".$annonce->Occas_Prix."',
                                    '".$annonce->Occas_Adebattre."',
                                    '".$annonce->Occas_MiseCirculation."',
                                    '".$annonce->Occas_Millesime."',
                                    '".$annonce->Occas_Kilometrage."',
                                    '".$annonce->Occas_Kilom_Moteur."',
                                    '".$annonce->Occas_Couleur."',
                                    '".$annonce->Occas_Coul_Metal."',
                                    '".$annonce->Occas_ChevFisc."',
                                    '".$annonce->Occas_NbPorte."',
                                    '".$annonce->Occas_Bt_Vitesse."',
                                    '".$annonce->Occas_Premieremain."',
                                    '".$annonce->Occas_CT."',
                                    '".$annonce->Occas_Garantie."',
                                    '".$annonce->Occas_IDpartenaire."',
                                    '".$annonce->Occas_FImage."',
                                    '".$annonce->Occas_Reference."',
                                    '".$annonce->Occas_Opt_Parution."',
                                    '".$annonce->Occas_TypePaiement."',
                                    '".$annonce->Occas_Valide."',
                                    '".$annonce->Occas_Montantpaye."',
                                    '".$annonce->annonce_video."',
                                    '".$op."','2'";
            if(isset($annonce->Occas_Commentaire)) $sql .= ",'".$annonce->Occas_Commentaire."'";
            $sql .=")";
            $cnx->exec($sql);
            $rs2 = $cnx->query("select IdOccasion from ao_voiture_occasion order by IdOccasion desc limit 1");
            $row2 = $rs2->fetchAll();
            $id = $row2[0]->IdOccasion;
            return $id;
            
        } else {
            
            $sql = "UPDATE ao_voiture_occasion 
                    SET Occas_Vendeur = '".addslashes($annonce->vendeur_id). "',
                        Occas_Pays = '".addslashes($annonce->vendeur_pays). "',
                        Occas_Departement = '".addslashes($annonce->vendeur_departement). "',
                        Occas_NumImmatricul = '".addslashes($annonce->vendeur_immatriculation). "',
                        Occas_DateSaisie = NOW(),
                        Occas_Groupe = '".addslashes($annonce->Occas_Groupe)."',
                        Occas_Marque = '".addslashes($annonce->Occas_Marque)."',
                        Occas_Modele = '".addslashes($annonce->Occas_Modele)."',
                        Occas_Version = '".addslashes($annonce->Occas_Version)."',
                        Occas_Carburation = '".addslashes($annonce->Occas_Carburation)."',
                        Occas_Prix =  '".addslashes($annonce->Occas_Prix)."',
                        Occas_Adebattre = '".addslashes($annonce->Occas_Adebattre)."',
                        Occas_MiseCirculation = '".addslashes($annonce->Occas_MiseCirculation)."',
                        Occas_Millesime = '".addslashes($annonce->Occas_Millesime)."',
                        Occas_Kilometrage = '".addslashes($annonce->Occas_Kilometrage)."',
                        Occas_Kilom_Moteur = '".addslashes($annonce->Occas_Kilom_Moteur)."',
                        Occas_Couleur = '".addslashes($annonce->Occas_Couleur)."',
                        Occas_Coul_Metal = '".addslashes($annonce->Occas_Coul_Metal)."',
                        Occas_ChevFisc = '".addslashes($annonce->Occas_ChevFisc)."',
                        Occas_NbPorte = '".addslashes($annonce->Occas_NbPorte)."',
                        Occas_Bt_Vitesse = '".addslashes($annonce->Occas_Bt_Vitesse)."',
                        Occas_Premieremain =  '".addslashes($annonce->Occas_Premieremain)."',
                        Occas_CT = '".addslashes($annonce->Occas_CT)."',
                        Occas_Garantie = '".addslashes($annonce->Occas_Garantie)."',
                        Occas_Partenaire = '".addslashes($annonce->Occas_IDpartenaire)."',
                        Occas_Fimage = '".addslashes($annonce->Occas_FImage)."',
                        Occas_Reference = '".addslashes($annonce->Occas_Reference)."',
                        Occas_Opt_Parution = '".addslashes($annonce->Occas_Opt_Parution)."',
                        Occas_TypePaiement = '".addslashes($annonce->Occas_TypePaiement)."',
                        Occas_Valide = '".addslashes($annonce->Occas_Valide)."',
                        Occas_Montantpaye = '".addslashes($annonce->Occas_Montantpaye)."',
                        annonce_video = '".addslashes($annonce->annonce_video)."',
                        Occas_DateModif = NOW()";
            
            if(($annonce->Occas_Commentaire) != '') $sql .= " ,Occas_Commentaire = '".addslashes($annonce->Occas_Commentaire)."'";
            $sql .="    WHERE IdOccasion = " . addslashes($annonce->idOccasion);

            $cnx->exec($sql);
            return $annonce->idOccasion;
        }
        
             
    }

   /**
     * Fonction permettant d'insérer des photos dans ao_photo
    */
    public static function  InsertIdPhoto($photo) {
             $sql = "INSERT INTO ao_photo (photo_name) VALUES " ;
             foreach ($photo as $k=>$item) {
                    $sep = (!$k)? "" : ",";
                    $sql .= $sep . "('$item')";
             }
             $cnx = jDb::getConnection();
             $cnx->exec($sql);
 
    }
    
     /*
      * fonction permettant d'inserer les photos si elles n'éxistent pas encore
      * et de retourner les Ids
      */
    
    public static function returnIdPhotos($photo,$annonceId = 0){
        
        $cnx = jDb::getConnection();
        $res = array();
        foreach ($photo as $key => $value) {
            if ($value) {
                $rs     = $cnx->query("SELECT photo_id FROM ao_photo WHERE photo_name = '" . addslashes($value) . "'");
                $row = $rs->fetchAll();
                if (count($row) > 0){
                     $res[] = $row[0]->photo_id;
                } else {
                    $cnx->exec("INSERT INTO ao_photo (photo_name) VALUES ('" . addslashes($value) . "')");
                    $rs2 = $cnx->query("SELECT photo_id FROM ao_photo WHERE photo_name = '" . addslashes($value) . "'");
                    $row2 = $rs2->fetchAll();
                    $res[] = $row2[0]->photo_id;
                }
            }
        }
        return $res;
    }
   /**
     * Fonction permettant d'insérer annonce_id,photo_id dans table ao_photo_annonce
    */
    public static function  getIdPhoto($nb) {
             $cnx = jDb::getConnection();
             $sql = "SELECT photo_id FROM ao_photo order by photo_id desc limit ".$nb;
             $rs     = $cnx->query($sql);
             $res = array();
             while ($row = $rs->fetch()) {
                 $res[] = $row->photo_id;
             }
             return $res;
 
    }

    /**
     * Fonction permettant de récupérer les annonces dans le caroussel du front
    */
    public static function  getAll($limit = 20, $idAnnonce = 0, $groupBy = false, $withImage = false) {
            
         $sql  = " SELECT   IdOccasion,
                            marque_logo, 
                            Occas_Modele, 
                            Occas_Prix, 
                            Occas_Version, 
                            Occas_Marque, 
                            Occas_Couleur, 
                            marque_libelle, 
                            modele_libelle, 
                            photo_name, 
                            Occas_Kilometrage, 
                            Occas_Kilom_Moteur, 
                            Occas_Millesime, 
                            Occas_NbPorte, 
                            Occas_Partenaire, 
                            Occas_Fimage, 
                            Part_Code, 
                            departement_nom, 
                            region, 
                            departement_num, 
                            Occas_Reference, 
                            Vendeur_Nom, 
                            Vendeur_Prenom, 
                            Vendeur_Adresse, 
                            Vendeur_CP, 
                            Vendeur_Ville, 
                            Vendeur_Email, 
                            if(Occas_Vendeur_Pro, 'Pro', 'Particulier') as typeVendeur, 
                            if(Vendeur_Tel_Dom, Vendeur_Tel_Dom, if(Vendeur_Tel_Bureau, Vendeur_Tel_Bureau, if(Vendeur_Tel_Port, Vendeur_Tel_Port, ''))) as tel, 
                            V.name as vitesse, 
                            CARBU.name as carburation "; //,
                            
         $sql .= " FROM ao_voiture_occasion O";
         $sql .= " INNER JOIN ao_marque M ON M.marque_id = O.Occas_Marque";
         $sql .= " INNER JOIN ao_vendeur ON ao_vendeur.IdVendeur = O.Occas_Vendeur";

         $sql .= " LEFT JOIN ao_modele MO ON MO.modele_id = O.Occas_Modele";

         $sql .= " LEFT JOIN ao_photo_annonce P ON P.annonce_id = O.IdOccasion";
         $sql .= " LEFT JOIN ao_photo PH ON PH.photo_id = P.photo_id";
         $sql .= " LEFT JOIN ao_carburation CARBU ON CARBU.id = O.Occas_Carburation";
         $sql .= " LEFT JOIN ao_vitesse V ON V.id = O.Occas_Bt_Vitesse";
         $sql .= " LEFT JOIN ao_departement D ON D.departement_id = O.Occas_Departement";
         $sql .= " LEFT JOIN ao_partenaire PART ON PART.IdPartenaire = O.Occas_Partenaire";
         $sql .= " WHERE 1 "; 

         if ($idAnnonce && !$withImage)
             $sql .=" AND IdOccasion IN (" . $idAnnonce . ")";

         if ($withImage)
             $sql .=" AND IdOccasion NOT IN (" . $idAnnonce . ")";

         $sql .=" GROUP BY IdOccasion";

         // $sql .=" ORDER BY O.Occas_DateSaisie DESC";

         $cnx  = jDb::getConnection();
         $rs   = $cnx->limitQuery($sql, 0, $limit);

         return $rs->fetchAll();
    }

    /**
     * Fonction permettant de récupérer les diapo d'une annonces dans le caroussel du front
     */
    public static function  getAnnonceDiapo($limit, $occasionIN = "", $notIn = false) {
            
         $sql  = " SELECT   IdOccasion,
                            marque_logo, 
                            Occas_Modele, 
                            Occas_Prix, 
                            Occas_Version, 
                            Occas_Marque, 
                            Occas_Couleur, 
                            marque_libelle, 
                            modele_libelle, 
                            photo_name, 
                            Occas_Kilometrage, 
                            Occas_Kilom_Moteur, 
                            Occas_Millesime, 
                            Occas_NbPorte, 
                            departement_nom, 
                            Occas_Partenaire ";
                            
         $sql .= " FROM ao_voiture_occasion O";
         $sql .= " INNER JOIN ao_marque M ON M.marque_id = O.Occas_Marque";
         $sql .= " INNER JOIN ao_departement DE ON DE.departement_id = O.Occas_Departement";

         $sql .= " LEFT JOIN ao_modele MO ON MO.modele_id = O.Occas_Modele";

         $sql .= " LEFT JOIN ao_photo_annonce P ON P.annonce_id = O.IdOccasion";
         $sql .= " LEFT JOIN ao_photo PH ON PH.photo_id = P.photo_id";
         $sql .= " WHERE 1 AND O.Occas_Valide = 1 "; 
         $sql .= " AND Occas_Prix > 0"; 

         if ($occasionIN != "" && !$notIn)
            $sql .= " AND O.IdOccasion IN ($occasionIN) "; 

         if ($occasionIN != "" && $notIn)
            $sql .= " AND O.IdOccasion NOT IN ($occasionIN) "; 
         $sql .=" LIMIT $limit";


         $cnx  = jDb::getConnection();
         $rs   = $cnx->query($sql);

         return $rs->fetchAll();
    }

    /**
     * récupérer les ids d'annonce correspondant à une option donnée
     * soit multidiffusion, diaporama , pack pole position
     *
     * @param string $opt1
     * @param string $opt2 si 2 option à la fois
     * 
     * @return array
     */
     public static function getIdAnnonceWithOption ($opt1 = "", $opt2 = "", $limit = 0) {
        $cnx = jDb::getConnection();

        jClasses::inc('commun~communSrv');

        $sql  = " SELECT ao_annonce_formule.idOccasion FROM ao_annonce_formule ";
        $sql .= " LEFT JOIN ao_voiture_occasion ON ao_voiture_occasion.IdOccasion = ao_annonce_formule.idOccasion";
        $sql .= " WHERE ao_voiture_occasion.Occas_Valide = '1' AND ao_annonce_formule.idOption LIKE '%".$opt1."%' ";
        if ($opt2)
            $sql .= " OR idOption LIKE '%".$opt2."%'";

        $sql .= " OR idOption LIKE '%".OPTION_PACK."%'"; //toujours include l'annonce ayant choisie cette option
        
        $sql .= " ORDER BY id DESC ";
    
        if ($limit)
            $sql .= " LIMIT $limit";

        $rs     = $cnx->query($sql);
        $res = array();
        while ($row = $rs->fetch()) {
             $res[] = $row->idOccasion;
        }

		return $res;

     }


    /**
     * Insertion des liaisons entre une annonce et ses photos
     * @param int $annonceId
     * @param array $photoId
     *
     */

     public static function insertPhotoAnnonce($annonceId, $photoId){
         if($annonceId != 0){
            $cnx = jDb::getConnection();
         
            $cnx->exec("DELETE FROM ao_photo_annonce WHERE annonce_id = '" . $annonceId . "'");
            if(sizeof($photoId) > 0){
                $sqlInsert = "";
                foreach ($photoId as $key => $value) {
                    $sep = ($key == 0)? "INSERT INTO ao_photo_annonce (annonce_id, photo_id) VALUES " : ",";
                    $sqlInsert .= $sep . "($annonceId,$value)";
                }
                $cnx->exec($sqlInsert);
            }
         }
     }

    /**
     * Récupération des photos d'une annonce
     * @param int $annonceId
     *
     */

     public static function getPhotoAnnonce($annonceId, $limit = 0){
        $sql  = " SELECT photo_name FROM ao_photo_annonce ";
        $sql .= " INNER JOIN  ao_photo ON ao_photo.photo_id = ao_photo_annonce.photo_id";
        $sql .= " WHERE ao_photo_annonce.annonce_id = " . $annonceId;

        if ($limit) 
            $sql .= " LIMIT $limit ";
        $cnx  = jDb::getConnection();
        $rs   = $cnx->query($sql);

         return $rs->fetchAll();
     }
    /**
     * Récupération des équipements d'une annonce
     * @param int $annonceId
     *
     */

     public static function getEquipementAnnonce($annonceId){
        $sql  = " SELECT lib_equipement, lib_categ_equipement, CAT.id_categ_equipement AS categId FROM ao_annonce_equipement_choix EC";
        $sql .= " INNER JOIN ao_equipement ON ao_equipement.id_equipement = EC.id_equipement"; // --- equipement
        $sql .= " LEFT JOIN ao_categ_equipement CAT ON CAT.id_categ_equipement = ao_equipement.id_categ_equipement"; // --- categorie

        $sql .= " WHERE EC.id_annonce = " . $annonceId;
        $sql .= " ORDER BY CAT.id_categ_equipement ";
        $cnx  = jDb::getConnection();
        $rs   = $cnx->query($sql);

         return $rs->fetchAll();
     }

     /**
     * groupe les données par categorie
     * @return array
     */
    public static function groupEquipementByCateg($datas) {
        $result = array();
        foreach ($datas as $k=>$item){

            $equipment [] = $item->lib_equipement;
            if ( (isset($datas[$k+1]->categId) && $datas[$k+1]->categId != $item->categId) || !isset($datas[$k+1]->categId) ) {
                $objet = new stdClass();
                $objet->categ     = $item->lib_categ_equipement;
                $objet->equipment = $equipment;

                $result[] = $objet;
                unset($equipment);
            }
        }
        
        return $result;
    }


    /**
    * récupération des choix ds équipements
    * @param array $_params données post et faire un preg_match pour ne récupérer que les choix
    */
     public static function getAnnonceChoixEquipement($_params){
       $choix = array();
       foreach($_params as $k=>$val){
           if(preg_match("/choix/i",$k) && $k){
             $choix[] = $val;
           }
       }
       return $choix;

    }
    
    /*
     * Fonction pour verifier si le vendeur éxiste ou pas
     */
    public static  function checkCoordonnees($vendeurCoord){
        $cnx  = jDb::getConnection();
        $sql  = " 
						SELECT
							AVO.IdOccasion
						FROM ao_vendeur AV
							LEFT JOIN ao_voiture_occasion AVO ON AVO.Occas_Vendeur = AV.IdVendeur
						WHERE   AV.Vendeur_Nom		= '".$vendeurCoord->name."'
						AND AV.Vendeur_Naissance	= '".$vendeurCoord->birth."'
						AND (AVO.Occas_Valide <> '3' OR AVO.Occas_Valide IS NULL)
						AND AVO.Occas_NumImmatricul = '".$vendeurCoord->immat."'
						ORDER BY AVO.Occas_DateSaisie DESC 
						LIMIT 1
					";
        $rs   = $cnx->query($sql);
        $row = $rs->fetchAll();
        if(sizeof($row) == 1) return $row[0]->IdOccasion;
        else return 0;
    }
    
    /*
     * Fonction pour generer la référence sur 
     * le détail de la référence (si pas d'annonce)
     */
    public static function genererNomRef($ref_deb){
        $reference = new stdClass();
        $index_source = substr($ref_deb, 4, 1);
        switch ($index_source) {
            case 'P':
                $reference->source = "Particulier";
                break;
            case 'G':
                $reference->source = "Garage";
                break;
            case 'M':
                $reference->source = "Marketing";
                break;

            default:
                break;
        }
        
        $index_prov = substr($ref_deb, 5, 1);
        switch ($index_prov) {
            case 'C':
                $reference->prov = "Courrier";
                break;
            case 'W':
                $reference->prov ="Web";
                break;
            case 'M':
                $reference->prov ="Minitel";
                break;
            case 'T':
                $reference->prov ="Telephone";
                break;
            case 'F':
                $reference->prov ="Fichier";
                break;

            default:
                break;
        }
        
        
        $index_parut = substr($ref_deb, 6, 1);
        switch ($index_parut) {
            case '0':
                $reference->parut = "Uniquement sur le web";
                break;
            case '1':
                $reference->parut = "1 passage";
                break;
            case '2':
                $reference->parut = "2 passages";
                break;
            case 'X':
                $reference->parut = "Jusqu'à la vente";
                break;
            case 'Z':
                $reference->parut = "Speed Impact";
                break;

            default:
                break;
        }
        
        
        $index_photo = substr($ref_deb, 7, 1);
        switch ($index_photo) {
            case 'S':
                $reference->photo = "Sans photo";
                break;
            case 'C':
                $reference->photo = "Photo couleur";
                break;
            case 'N':
                $reference->photo = "Photo Noir&Blanc";
                break;
            case 'W':
                $reference->photo = "Web uniquement";
                break;

            default:
                break;
        }
        
        $index_enr = substr($ref_deb, 8, 1);
        switch ($index_enr) {
            case 'S':
                $reference->enr = "Simple";
                break;
            case 'T':
                $reference->enr = "Garantie";
                break;
            case 'E':
                $reference->enr = "Encadré";
                break;
            case 'G':
                $reference->enr = "Gras";
                break;

            default:
                break;
        }
        return $reference;
    }
    
    /*
     * Fonction permettant de généerer la réference 
     * si pas d'annonce Id
     * @param string $ref_deb
     */
    public static function genererRef($voiture){
        
        $reference = new stdClass();
        $ref_deb = $voiture->Occas_Reference;
        $index_source = substr($ref_deb, 4, 1);
        switch ($index_source) {
            case 'P':
                $reference->sourceId = 1;
                break;
            case 'G':
                $reference->sourceId = 2;
                break;
            case 'M':
                $reference->sourceId = 3;
                break;

            default:
                break;
        }
        
        $index_prov = substr($ref_deb, 5, 1);
        switch ($index_prov) {
            case 'C':
                $reference->provId = 1;
                break;
            case 'W':
                $reference->provId =2;
                break;
            case 'M':
                $reference->provId =3;
                break;
            case 'T':
                $reference->provId =4;
                break;
            case 'F':
                $reference->provId =5;
                break;

            default:
                break;
        }
        
        
        $index_parut = substr($ref_deb, 6, 1);
        switch ($index_parut) {
            case '0':
                $reference->parutId = 4;
                break;
            case '1':
                $reference->parutId = 1;
                break;
            case '2':
                $reference->parutId = 2;
                break;
            case 'X':
                $reference->parutId = 3;
                break;
            case 'Z':
                $reference->parutId = 5;
                break;

            default:
                break;
        }
        
        
        $index_photo = substr($ref_deb, 7, 1);
        switch ($index_photo) {
            case 'S':
                $reference->photo_id = 1;
                break;
            case 'C':
                $reference->photo_id = 2;
                break;
            case 'N':
                $reference->photo_id = 3;
                break;
            case 'W':
                $reference->photo_id = 4;
                break;

            default:
                break;
        }
        
        $index_enr = substr($ref_deb, 8, 1);
        switch ($index_enr) {
            case 'S':
                $reference->enrId = 1;
                break;
            case 'T':
                $reference->enrId = 4;
                break;
            case 'E':
                $reference->enrId = 2;
                break;
            case 'G':
                $reference->enrId = 3;
                break;
            case '1':
                $reference->enrId = 1;
                break;
            case '2':
                $reference->enrId = 2;
                break;
            case '3':
                $reference->enrId = 3;
                break;
            case '4':
                $reference->enrId = 4;
                break;

            default:
                break;
        }
        
        switch ($voiture->Occas_TypePaiement) {
            case 'ch':
                $reference->paie = 1;
                break;
            case 'cb':
                $reference->paie = 2;
                break;
            case 'md':
                $reference->paie = 3;
                break;
            case 'g':
                $reference->paie = 4;
                break;

            default:
                break;
        }
        
        
        switch ($voiture->Occas_AffPart) {
            case 0:
                $reference->origine = 1;
                break;
            case 1:
                $reference->origine = 3;
                break;
            case 2:
                $reference->origine = 2;
                break;

            default:
                break;
        }
        
        $index_gar = substr($ref_deb, 8, 1);
        switch ($index_gar) {
            case 'T':
                $reference->garId = 1;
                break;
            default :
                break;
        }
        
        return $reference;
    }
    /*
     * Fonction permettant de généerer la réference 
     * mise à jour si pas d'annonce Id
     * @param stdClass $annonce
     */
    public static function genererRefMaj($annonce){
        
        $cnx  = jDb::getConnection();
        $reference  = new stdClass();
                
        switch ($annonce->annonce_source_id) {
            case 1:
                $source = 'P';
                break;
            case 2:
                $source = 'G';
                break;
            case 3:
                $source = 'M';
                break;

            default:
                break;
        }
        
        switch ($annonce->annonce_provenance_id) {
            case 1:
                $prov = 'C';
                break;
            case 2:
                $prov = 'W';
                break;
            case 3:
                $prov = 'M';
                break;
            case 4:
                $prov = 'T';
                break;
            case 5:
                $prov = 'F';
                break;

            default:
                break;
        }
        
        
        switch ($annonce->annonce_parution_id) {
            case 4:
                $parut = '0';
                break;
            case 1:
                $parut = '1';
                break;
            case 2:
                $parut = '2';
                break;
            case 3:
                $parut = 'X';
                break;
            case 5:
                $parut = 'Z';
                break;

            default:
                break;
        }
        
        switch ($annonce->annonce_photo_id) {
            case '1':
                $photo = "S";
                break;
            case '2':
                $photo = "C";
                break;
            case '3':
                $photo = "N";
                break;
            case '4':
                $photo = "W";
                break;

            default:
                break;
        }
        
        
        switch ($annonce->annonce_enrichissement_id) {
            case 1:
                $enr = 'S';
                break;
            case 4:
                $enr = 'T';
                break;
            case 2:
                $enr = 'E';
                break;
            case 3:
                $enr = 'G';
                break;

            default:
                break;
        }
        
        switch ($annonce->annonce_garantie_id) {
            case 1:
                $gar = 3;
                break;
            default:
                $gar = 0;
                break;       
        }
        
        $sql = "    SELECT parution_num 
                        FROM ao_parution
                        WHERE parution_limite >= '".date("Y-m-d")."'
                        ORDER BY parution_date
                        LIMIT 1";
        
        $rs   = $cnx->query($sql);
        $rows = $rs->fetchAll();
        if(sizeof($rows)>0) $numero = $rows[0]->parution_num . "-";
        else $numero = "000-";
        
        if ( $gar  != 0 ){
            
            $sql = "SELECT Tarif_Prix
                    FROM ao_tarif
                    WHERE Tarif_Enrichissement = 'T'
                    AND Tarif_Ordre = '".$gar."'";
            $rs   = $cnx->query($sql);
            $rows = $rs->fetchAll();
            if(sizeof($rows)>0) {
               // $prix += (int) $rows[0]->Tarif_Prix ;
                $enr = $gar;
            }
            
        }
        if ( $enr >= 1 && $enr <= 4 ){
            $enr = "T";
        }
        $reference->ref =  $numero.$source.$prov.$parut.$photo.$enr."00-";
        
        if ( ($parut=="1") && ($photo == 'W')) {
            
            $sql = "SELECT (SUBSTRING_INDEX(Occas_Reference,'-',1)+0) AS Parution, (SUBSTRING_INDEX(Occas_Reference,'-',-1)+0) AS Numero
                        FROM ao_voiture_occasion
                        WHERE SUBSTRING(SUBSTRING_INDEX(Occas_Reference,'-',-2),2,1) = '".$prov."'
                            AND ((SUBSTRING(SUBSTRING_INDEX(Occas_Reference,'-',-2),3,1) = '".$parut."') OR (SUBSTRING(SUBSTRING_INDEX(Occas_Reference,'-',-2),3,1) = 'X'))

                            AND SUBSTRING(SUBSTRING_INDEX(Occas_Reference,'-',-2),4,1) = '".$photo."'
                            AND SUBSTRING_INDEX(Occas_Reference,'-',1) = '".$numero."'
                        ORDER BY Numero 
                        DESC LIMIT 1";

        }
        else {
            $sql = "SELECT (SUBSTRING_INDEX(Occas_Reference,'-',1)+0) AS Parution, (SUBSTRING_INDEX(Occas_Reference,'-',-1)+0) AS Numero
                        FROM ao_voiture_occasion

                        WHERE SUBSTRING(SUBSTRING_INDEX(Occas_Reference,'-',-2),2,1) = '".$prov."'
                            AND SUBSTRING(SUBSTRING_INDEX(Occas_Reference,'-',-2),3,1) <> '0'
                            AND SUBSTRING(SUBSTRING_INDEX(Occas_Reference,'-',-2),4,1) = '".$photo."'
                            AND SUBSTRING_INDEX(Occas_Reference,'-',1) = '".$numero."'
                        ORDER BY Numero 
                        DESC LIMIT 1";
        }
        $rs   = $cnx->query($sql);
        $rows = $rs->fetchAll();
        if((sizeof($rows)>0) && ($rows[0]->Numero != 0)){
            $reference->ref .= (($rows[0]->Numero)+1);
        } else {
            if ($parut == "0"){
                if ($photo == "S") {
                    switch($prov)
                    {
                        case "C":
                            $reference->ref .= "60001";
                            break;
                        case "W":
                            $reference->ref .= "70001";
                            break;
                        case "M":
                            $reference->ref .= "80001";
                            break;
                        case "T":
                            $reference->ref .= "85001";
                            break;
                        case "F":
                            $reference->ref .= "90001";
                            break;
                        default:
                            break;
                    }
                } else 
                    // Photo seulement pour le Web
                    $reference->ref .= "95001";
            }
            // PA pour le journal
            else {
                switch($photo)
                {
                    case "S": 
                        switch($prov)
                        {
                            case "C":
                                $reference->ref .= "10001";
                                break;
                            case "W":
                                $reference->ref .= "20001";
                                break;
                            case "M":
                                $reference->ref .= "31001";
                                break;
                            case "T":
                                $reference->ref .= "48001";
                                break;
                            case "F":
                                $reference->ref .= "32001";
                                break;
                            default:
                                break;
                        };
                        break;
                    case "C": 
                        switch($prov)
                        {
                            case "C": 
                                $reference->ref .= "50001";
                                break;
                            case "T": 
                                $reference->ref .= "52001";
                                break;
                            case "W": 
                                $reference->ref .= "54001";
                                break;
                            default:
                                break;
                        };
                        break;
                    case "N": 
                        switch($prov)
                        {
                            case "C": 
                                $reference->ref .= "56001";
                                break;
                            case "W": 
                                $reference->ref .= "58001";
                                break;
                            default:
                                break;
                        };
                        break;
                    case "W":
                        $reference->ref .= "25001";
                        break;
                    default:
                        break;
                }
            }
        }
        
        switch ($annonce->annonce_paiement_id) {
            case 1:
                $reference->paie = 'ch';
                break;
            case 2:
                $reference->paie = 'cb';
                break;
            case 3:
                $reference->paie = 'md';
                break;
            case 4:
                $reference->paie = 'b';
                break;

            default:
                break;
        }
        
        
        switch ($annonce->annonce_origine_id) {
            case 1:
                $reference->orig = '0';
                break;
            case 3:
                $reference->orig = '1';
                break;
            case 2:
                $reference->orig = '2';
                break;

            default:
                break;
        }
        
        //garantie
        return $reference;
    }

    
    /**
     * Met à jour le statut d'une annonce
     * @param int $annonceId
     * @param int $status
     *
     */

     public static function updateAnnonceStatus($annonceId, $status){
        $cnx = jDb::getConnection();
        if ($annonceId) {
            try {
                $cnx->exec("UPDATE ao_voiture_occasion SET  Occas_Valide ='". $status ."' WHERE IdOccasion = '" . $annonceId . "'");
            } catch (exception $e) {
                die($e->getMessage());
            }
        }
     }


    /**
     * Récupération du vendeur d'une annonce
     * @param int $annonceId
     *
     */

     public static function getAnnonceVendeur($annonceId){
        $sql  = " SELECT Vendeur_Nom, Vendeur_Prenom, Vendeur_CP, IdVendeur FROM ao_voiture_occasion ";
        $sql .= " LEFT JOIN ao_vendeur ON ao_voiture_occasion.Occas_Vendeur = ao_vendeur.IdVendeur";
       
        $sql .= " WHERE IdOccasion = " . $annonceId;
        $sql .= " LIMIT 1";
        $cnx  = jDb::getConnection();
        $rs   = $cnx->query($sql);

        $result = $rs->fetchAll();

        return $result[0];
     }

    /**
     * Récupération du champ Occas_EstModifier
     * @param int $annonceId
     *
     */

     public static function checkChanges($annonceId){
        $sql  = " SELECT Occas_EstModifier, Occas_Valide FROM ao_voiture_occasion WHERE IdOccasion = " . $annonceId;
       
        $sql .= " LIMIT 1";
        $cnx  = jDb::getConnection();
        $rs   = $cnx->query($sql);

        $result = $rs->fetchAll();

        return $result[0];
     }

    /**
     * MAJ  de la date de modif
     * @param int       $annonceId
     * @param string    $query
     *
     */

     public static function updateDateModif($annonceId, $query){
        $sql  = "UPDATE ao_voiture_occasion
                        SET Occas_DateModif = '".date("Y-m-d")."',
                            Occas_DateDerAdmin = '".date("Y-m-d")."',
                            ".$query."
                        WHERE IdOccasion = '".$annonceId."'";
       
        $cnx = jDb::getConnection();
        $cnx->exec($sql);
     }

     /**
     * Envoi du mail d'avertissement de la validation
     * @param int $annonceId
     *
     */

     public static function alertmailvalid($annonceId){
        $datas = self::getInfoForMail($annonceId);

        if ( $datas->Vendeur_Email != "" )
        {
            $TNaissance     = explode("-",$datas->Vendeur_Naissance);
            $Naissance      = $TNaissance[2]."/".$TNaissance[1]."/".$TNaissance[0];
            $prix_annonce   = '';
            $Message        = '';

            switch ( $datas->Occas_Opt_Parution )
            {
                case 2010 : $Message .= "Publication pendant 1 mois sur www.auto-occasion.fr ";break;
                case 2310 : $Message .= "Publication pendant 1 mois + photo sur www.auto-occasion.fr ";break;
                case 1011 : $Message .= "1 parution dans le journal Auto Occasion (dur&eacute;e 1 mois) + publication illimité sur www.auto-occasion.fr ";break;
                case 1311 : $Message .= "1 parution dans le journal Auto Occasion (dur&eacute;e 1 mois) + publication pendant 1 mois avec photo sur www.auto-occasion.fr";break;
                case 1012 : $Message .= "Une annonce pour 2 parutions dans le journal Auto Occasion";break;
                case 1014 : $Message .= "Une annonce jusqu'&agrave; la vente dans le journal Auto Occasion + 1 parution illimit&eacute; sur www.auto-occasion.fr + Multi-diffusion chez nos partenaires";break;
                case 1314 : $Message .= "Une annonce jusqu'&agrave; la vente dans le journal Auto Occasion + 1 parution illimit&eacute; avec photo sur www.auto-occasion.fr + Multi-diffusion chez nos partenaires";break;
                case 1021 : $Message .= "Une annonce en gras pour 1 parution dans le journal Auto Occasion";break;
                case 1022 : $Message .= "Une annonce en gras pour 2 parutions dans le journal Auto Occasion";break;
                case 1024 : $Message .= "Une annonce en gras jusqu'à la vente dans le journal Auto Occasion";break;
                case 1031 : $Message .= "Une annonce encadrée pour 1 parution dans le journal Auto Occasion";break;
                case 1032 : $Message .= "Une annonce encadrée pour 2 parutions dans le journal Auto Occasion";break;
                case 1034 : $Message .= "Une annonce encadrée jusqu'à la vente dans le journal Auto Occasion";break;
                case 1111 : $Message .= "Une annonce + photo N/B pour 1 parution dans le journal Auto Occasion";break;
                case 1112 : $Message .= "Une annonce + photo N/B pour 2 parutions dans le journal Auto Occasion";break;
                case 1114 : $Message .= "Une annonce + photo N/B jusqu'à la vente dans le journal Auto Occasion";break;
                case 1121 : $Message .= "Une annonce en gras + photo N/B pour 1 parution dans le journal Auto Occasion";break;
                case 1122 : $Message .= "Une annonce en gras + photo N/B pour 2 parutions dans le journal Auto Occasion";break;
                case 1124 : $Message .= "Une annonce en gras + photo N/B jusqu'à la vente dans le journal Auto Occasion";break;
                case 1131 : $Message .= "Une annonce encadrée + photo N/B pour 1 parution dans le journal Auto Occasion";break;
                case 1132 : $Message .= "Une annonce encadrée + photo N/B pour 2 parutions dans le journal Auto Occasion";break;
                case 1134 : $Message .= "Une annonce encadrée + photo N/B jusqu'à la vente dans le journal Auto Occasion";break;
                case 1211 : $Message .= "Une annonce + photo couleur pour 1 parution dans le journal Auto Occasion";break;
                case 1212 : $Message .= "Une annonce + photo couleur pour 2 parutions dans le journal Auto Occasion";break;
                case 1214 : $Message .= "Une annonce jusqu'&agrave; la vente avec photo couleur dans le journal Auto Occasion + 1 parution illimit&eacute; avec photo sur www.auto-occasion.fr + Multi-diffusion chez nos partenaires";break;
                case 1221 : $Message .= "Une annonce en gras + photo couleur pour 1 parution dans le journal Auto Occasion";break;
                case 1222 : $Message .= "Une annonce en gras + photo couleur pour 2 parutions dans le journal Auto Occasion";break;
                case 1224 : $Message .= "Une annonce en gras + photo couleur jusqu'à la vente dans le journal Auto Occasion";break;
                case 1231 : $Message .= "Une annonce encadrée + photo couleur pour 1 parution dans le journal Auto Occasion";break;
                case 1232 : $Message .= "Une annonce encadrée + photo couleur pour 2 parutions dans le journal Auto Occasion";break;
                case 1234 : $Message .= "Une annonce encadrée + photo couleur jusqu'à la vente dans le journal Auto Occasion";break;
                case 3014 : $Message .= "Speed Impact :Une annonce illimitée dans le journal Auto Occasion et sur les 600 sites partenaires";break;
                case 3314 : $Message .= "Speed Impact :Une annonce illimitée dans le journal Auto Occasion et sur les 600 sites partenaires (avec photo)";break;
            }
            
            if ( $datas->Occas_MontantPaye != "" && $datas->Occas_MontantPaye != 0 )
            {
                if (strlen($datas->Occas_MontantPaye)==4)
                {
                $prix_annonce1=substr($datas->Occas_MontantPaye,0,2);
                $prix_annonce2=substr($datas->Occas_MontantPaye,2,2);   
                $prix_annonce=$prix_annonce1.",".$prix_annonce2;
                }
                elseif (strlen($datas->Occas_MontantPaye)==3) {
                $prix_annonce1=substr($datas->Occas_MontantPaye,0,1);
                                $prix_annonce2=substr($datas->Occas_MontantPaye,1,2);
                                $prix_annonce=$prix_annonce1.",".$prix_annonce2;
                }else{
                    $prix_annonce = $datas->Occas_MontantPaye ;
                }
            }
            
            $Parution = $Date = $Limite = "";
            if ( substr($datas->Occas_Opt_Parution,0,1) == 1 )
            {
                
                $Parution   = self::getInfoParution();
                $TDate      = explode("-",$Parution->Parution_Date);
                $Date       = $TDate[2]."/".$TDate[1]."/".$TDate[0];
                $TLimite    = explode("-",$Parution->Parution_Prepublication);
                $Limite     = $TLimite[2]."/".$TLimite[1]."/".$TLimite[0];
            }

            $tpl = new jTpl();

            $tpl->assign('server_name',     $_SERVER['SERVER_NAME']);
            $tpl->assign('datas',           $datas);        
            $tpl->assign('prix_annonce',    $prix_annonce);
            $tpl->assign('Parution',        $Parution);
            $tpl->assign('Date',            $Date);
            $tpl->assign('Limite',          $Limite);
            $tpl->assign('Naissance',       $Naissance);
            $tpl->assign('Message',         $Message);

            $contenu = $tpl->fetch('annonce~alertmailvalid');

            // envoi du mail

            $mail = new PHPmailer();
            $mail->IsSMTP();
            $mail->IsHtml(true);
            $mail->AddReplyTo("annonces@auto-occasion.fr", "Auto Occasion");
            $mail->AddAddress($datas->Vendeur_Email);
            $mail->Host         = $GLOBALS['gJConfig']->mailer['smtpHost'];
            $mail->Port         = $GLOBALS['gJConfig']->mailer['smtpPort'];
            $mail->Username     = 'Auto Occasion';
            $mail->From         = $GLOBALS['gJConfig']->mailer['webmasterEmail'];
            $mail->FromName     = 'Auto - occasion';
            $mail->Subject      = '[Auto Occasion] : Validation de votre annonce';
        
            $mail->Body         = utf8_encode(nl2br($contenu));;
            
            if (!$mail->Send()){
                $Erreur  = "Ce message n'a pas pu être envoyé.";
                $Erreur .= "Mailer Error: " . $mail->ErrorInfo;
                return utf8_encode($Erreur);
            }
            
            $mail->SmtpClose();
            $mail->ClearAddresses();
            unset($mail);

            }

        return "Ok";

     }


     /**
     * Recherche des informations sur la parution
     *
     */

     public static function getInfoParution(){
        $Query = "SELECT parution_num AS Parution_Npub, parution_date AS Parution_Date, parution_relance AS Parution_Prepublication
                            FROM ao_parution
                            WHERE parution_relance > '".date("Y-m-d")."'
                            ORDER BY parution_date ASC
                            LIMIT 1";
       
        $cnx  = jDb::getConnection();
        $rs   = $cnx->query($sql);

        $result = $rs->fetchAll();

        return $result[0];
     }
     /**
     * Recherche des informations sur le vendeur et l'occasion
     * @param int $annonceId
     *
     */

     public static function getInfoForMail($annonceId){
        $sql  = " SELECT 
                        Marque_Libelle, 
                        Modele_Libelle, 
                        Occas_Version, 
                        Occas_NumImmatricul, 
                        Occas_Fimage, 
                        Occas_MontantPaye, 
                        Occas_TypePaiement, 
                        Occas_Opt_Parution,
                        Civ_Nom, 
                        Vendeur_Prenom, 
                        Vendeur_Nom, 
                        Vendeur_Email, 
                        Vendeur_Naissance";

        $sql .= " FROM ao_voiture_occasion";
        $sql .= " LEFT JOIN ao_vendeur ON Occas_Vendeur = IdVendeur";
        $sql .= " LEFT JOIN ao_civilite ON Vendeur_Civilite = IdCivilite";
        $sql .= " LEFT JOIN ao_marque ON Occas_Marque = marque_id";
        $sql .= " LEFT JOIN ao_modele ON Occas_Modele = modele_id";
        $sql .= " WHERE IdOccasion = '".$annonceId."'";
       
        $sql .= " LIMIT 1";
        $cnx  = jDb::getConnection();
        $rs   = $cnx->query($sql);

        $result = $rs->fetchAll();

        return $result[0];
     }

    /**
     * Fonction permettant d'avoir la liste des url des annonces du site
     * % F:\svn_ao_111115\SVN_2\include\fonction.php & F:\svn_ao_111115\SVN_2\petites-annonces-vehicules-d-occasion\gestion\annonce.php
    **/
    public static function getUrlAnnonce($res) {

        jClasses::inc('commun~siteMapSrv');
        $tabUrl = array();
        foreach($res as $item){
		    $lien = 'http://'.$_SERVER['SERVER_NAME'].'/'.rtrim(siteMapSrv::contenulienRewriter($item->marque_libelle.'-'.$item->modele_libelle.'-'.$item->Occas_Version), '-').'/annonce-auto/'.$item->IdOccasion.'.html';

            $lien = ereg_replace(' ','-',$lien);
            $lien = ereg_replace('\'','-',$lien);
            $lien = str_replace(CHR(32),"",$lien);
            $lien = preg_replace('/ /','',$lien);
            $lien = str_replace("\xA0","",$lien);

            array_push($tabUrl,$lien);
       }

       return $tabUrl;
    }


    /**
     * Récupération des photos d'une voiture occasion
     * @param int $annonceId
     *
     */
     public static function getPhotoOccasion($idOccasion){

        $sql ="SELECT photo_name FROM ao_photo P";
        $sql.=" INNER JOIN ao_photo_annonce PA ON PA.photo_id = P.photo_id ";
        $sql.=" INNER JOIN ao_voiture_occasion  VO ON VO.IdOccasion = PA.annonce_id AND VO.IdOccasion ='".$idOccasion."'";
        
        $cnx  = jDb::getConnection();
        $rs   = $cnx->query($sql);
        return $rs->fetchAll();
     }
     
     /*
      * 
      */
     public static function updateFImage($idOccasion){
         $sql = "UPDATE ao_voiture_occasion SET Occas_Fimage = '' where IdOccasion = " . $idOccasion;
         $cnx = jDb::getConnection();
         $cnx->exec($sql);
     }
     
     public static function updateOptParution($idOccasion,$numParution){
         if ($idOccasion) {
             $sql = "UPDATE ao_voiture_occasion SET Occas_Opt_Parution = '".$numParution."' where IdOccasion = " . $idOccasion;
             $cnx = jDb::getConnection();
             $cnx->exec($sql);
         }
     }

     public static function updatePaiement($idOccasion){
         $sql = "UPDATE ao_voiture_occasion SET Occas_Estpaye = '1' where IdOccasion = " . $idOccasion;
         $cnx = jDb::getConnection();
         $cnx->exec($sql);
     }

    /*
    * Fonction permettant de mettre à jour Occas_TypePaiement après avoir choisi les types de paiement
    */
    public static function updateOccasPaiement($idOccasion,$type, $montant){
         $sql = "UPDATE ao_voiture_occasion SET Occas_TypePaiement = '".$type."', Occas_MontantPaye = '".$montant."'  where IdOccasion = " . $idOccasion;
         $cnx = jDb::getConnection();
         $cnx->exec($sql);
     }
     
     /*
      * Fonction pour vérifier et enregistrer les modifications
      * sur une annonce
      */
     public static function checkModif($voiture, $vendeur_id, $annonceMofifie){
         $checkVendeur = "";
         $checkVoiture = "";
         $cnx = jDb::getConnection();
         
         jClasses::inc('commun~common');
         $vendeur = common::chargeParId($vendeur_id, "ao_vendeur");
         /*
          * check modif vendeur
          */
         if(trim($annonceMofifie->vendeur_civilite) != trim($vendeur->Vendeur_Civilite)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_Civilite' : 'Vendeur_Civilite';
         }
         if(trim($annonceMofifie->vendeur_nom )!= trim($vendeur->Vendeur_Nom)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_Nom' : 'Vendeur_Nom';
         }
         if(trim($annonceMofifie->vendeur_prenom) != trim($vendeur->Vendeur_Prenom)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_Prenom' : 'Vendeur_Prenom';
         }
         if(trim($annonceMofifie->vendeur_naissance) != trim($vendeur->Vendeur_Naissance)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_Naissance' : 'Vendeur_Naissance';
         }
         if(trim($annonceMofifie->vendeur_adresse) != trim($vendeur->Vendeur_Adresse)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_Adresse' : 'Vendeur_Adresse';
         }
         if(trim($annonceMofifie->vendeur_cp) != trim($vendeur->Vendeur_CP)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_CP' : 'Vendeur_CP';
         }
         if(trim($annonceMofifie->vendeur_ville) != trim($vendeur->Vendeur_Ville)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_Ville' : 'Vendeur_Ville';
         }
         if(trim($annonceMofifie->vendeur_transfert) != trim($vendeur->Vendeur_Transfert)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_Transfert' : 'Vendeur_Transfert';
         }
         if(trim($annonceMofifie->vendeur_tel_dom) != trim($vendeur->Vendeur_Tel_Dom)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_Tel_Dom' : 'Vendeur_Tel_Dom';
         }
         if(trim($annonceMofifie->vendeur_tel_bureau) != trim($vendeur->Vendeur_Tel_Bureau)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_Tel_Bureau' : 'Vendeur_Tel_Bureau';
         }
         if(trim($annonceMofifie->vendeur_tel_por) != trim($vendeur->Vendeur_Tel_Port)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_Tel_Port' : 'Vendeur_Tel_Port';
         }
         if(trim($annonceMofifie->vendeur_email) != trim($vendeur->Vendeur_Email)){
             $checkVendeur .= ($checkVendeur != '') ? ','.'Vendeur_Email' : 'Vendeur_Email';
         }
         
         /*
          * check modif voiture
          */
         if(trim($voiture->Occas_Groupe) != trim($annonceMofifie->Occas_Groupe)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Groupe' : 'Occas_Groupe';
         }
         if(trim($voiture->Occas_Version) != trim($annonceMofifie->Occas_Version)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Version' : 'Occas_Version';
         }
         if(trim($voiture->Occas_Carburation) != trim($annonceMofifie->Occas_Carburation)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Carburation' : 'Occas_Carburation';
         }
         if(trim($voiture->Occas_Prix) != trim($annonceMofifie->Occas_Prix)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Prix' : 'Occas_Prix';
         }
         if(trim($voiture->Occas_Adebattre) != trim($annonceMofifie->Occas_Adebattre)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Adebattre' : 'Occas_Adebattre';
         }
         if(trim($voiture->Occas_MiseCirculation) != trim($annonceMofifie->Occas_MiseCirculation)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_MiseCirculation' : 'Occas_MiseCirculation';
         }
         if(trim($voiture->Occas_Millesime) != trim($annonceMofifie->Occas_Millesime)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Millesime' : 'Occas_Millesime';
         }
         if(trim($voiture->Occas_Kilometrage) != trim($annonceMofifie->Occas_Kilometrage)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Kilometrage' : 'Occas_Kilometrage';
         }
         if(trim($voiture->Occas_Kilom_Moteur) != trim($annonceMofifie->Occas_Kilom_Moteur)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Kilom_Moteur' : 'Occas_Kilom_Moteur';
         }
         if(trim($voiture->Occas_Couleur) != trim($annonceMofifie->Occas_Couleur)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Couleur' : 'Occas_Couleur';
         }
         if(trim($voiture->Occas_Coul_Metal) != trim($annonceMofifie->Occas_Coul_Metal)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Coul_Metal' : 'Occas_Coul_Metal';
         }
         if(trim($voiture->Occas_ChevFisc) != trim($annonceMofifie->Occas_ChevFisc)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_ChevFisc' : 'Occas_ChevFisc';
         }
         if(trim($voiture->Occas_NbPorte) != trim($annonceMofifie->Occas_NbPorte)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_NbPorte' : 'Occas_NbPorte';
         }
         if(trim($voiture->Occas_Bt_Vitesse) != trim($annonceMofifie->Occas_Bt_Vitesse)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Bt_Vitesse' : 'Occas_Bt_Vitesse';
         }
         if(trim($voiture->Occas_Premieremain) != trim($annonceMofifie->Occas_Premieremain)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Premieremain' : 'Occas_Premieremain';
         }
         if(trim($voiture->Occas_CT) != trim($annonceMofifie->Occas_CT)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_CT' : 'Occas_CT';
         }
         if(trim($voiture->Occas_Commentaire) != trim($annonceMofifie->Occas_Commentaire)){
             $checkVoiture .= ($checkVoiture != '') ? ','.'Occas_Commentaire' : 'Occas_Commentaire';
         }
         
         /*
          * Vérifie si des modifications sont déjà enregistrées
          * si oui :
          *     on merge les modif 
          * si non :
          *     on crée un nouvel enregistrement
          */
         $sqlCheckIfExist = 'SELECT idOccasion,modifVoiture,modifPhoto,modifVendeur,modifFormule
                             FROM ao_save_changes 
                             WHERE idOccasion = '.$voiture->IdOccasion;
         $rs   = $cnx->query($sqlCheckIfExist);
         $res  = $rs->fetchAll();
         if(!sizeof($res) && ($checkVoiture || $checkVendeur)){
             $sql = "INSERT INTO ao_save_changes 
                     (idOccasion,modifVoiture,modifPhoto,modifVendeur,modifFormule)
                     VALUES(
                     '".$voiture->IdOccasion."',
                     '".$checkVoiture."','',
                     '".$checkVendeur."',''
                     )";
         }else{
             if($res[0]->modifVoiture != ''){
                 $checkVoitureTmp = explode(',',$res[0]->modifVoiture);
                 if($checkVoiture != '')
                 $checkVoitureTmp = array_merge($checkVoitureTmp,explode(',',$checkVoiture));
                 array_unique($checkVoitureTmp);
                 $checkVoiture    = implode(',',$checkVoitureTmp);
             }
             if($res[0]->modifVendeur != ''){
                 $checkVendeurTmp = explode(',',$res[0]->modifVendeur);
                 if($checkVoiture != '')
                 $checkVendeurTmp = array_merge($checkVendeurTmp,explode(',',$checkVendeur));
                 array_unique($checkVendeurTmp);
                 $checkVendeur    = implode(',',$checkVendeurTmp);
             }
             $sql = "UPDATE ao_save_changes
                      SET modifVoiture = '".$checkVoiture.
                    "', modifVendeur = '".$checkVendeur.
                    "' WHERE idOccasion = ".$voiture->IdOccasion;
         }
         $cnx->exec($sql);
     }
     
     /*
      * verifier et retourner modif annonce
      * @return objet si modification
      *         null  sinon
      */
     public static function checkIfModifExist($idOccasion){
         $cnx = jDb::getConnection();
         $sqlCheckIfExist = 'SELECT idOccasion,modifVoiture,modifPhoto,modifVendeur,modifFormule
                             FROM ao_save_changes 
                             WHERE idOccasion = '.$idOccasion;
         $rs   = $cnx->query($sqlCheckIfExist);
         $res  = $rs->fetchAll();
         if(!sizeof($res)){
             return null;
         } else {
             $modifVoiture = $res[0]->modifVoiture;
             $modifVendeur = $res[0]->modifVendeur;
             $modifPhoto   = ($res[0]->modifPhoto) ? $res[0]->modifPhoto : 0;
             $modifFormule = ($res[0]->modifFormule) ? $res[0]->modifFormule : 0;
         }
         $result = new stdClass();
         $result->modifVoiture  = explode(',',$modifVoiture);
         $result->modifVendeur  = explode(',',$modifVendeur);
         $result->modifPhotos   = $modifPhoto;
         $result->modifFormule  = $modifFormule;
         return $result;
     }
     
     /*
      * vérifie si modif au niveau des photos
      * et enregistremetn dan ao_save_changes
      */
     public static function markPhotosModif($annonceId){
        $cnx = jDb::getConnection();
        $sqlCheckIfExist = 'SELECT idOccasion
                             FROM ao_save_changes 
                             WHERE idOccasion = '.$annonceId;
        $rs   = $cnx->query($sqlCheckIfExist);
        $res  = $rs->fetchAll();
        if(!sizeof($res)) {
         $sql = "INSERT INTO ao_save_changes 
                 (idOccasion,modifVoiture,modifPhoto,modifVendeur,modifFormule)
                 VALUES(
                 '".$annonceId."',
                 '','1','',''
                 )";
         }else{
             $sql = "UPDATE ao_save_changes
                      SET modifPhoto = '1'
                      WHERE idOccasion = ".$annonceId;
         }
        $cnx->exec($sql);
     }
     
     /*
      * recuperer id photo
      */
     public static function getPhotosIds($annonceId){
         $cnx = jDb::getConnection();
         $sql = " SELECT photo_id FROM ao_photo_annonce WHERE annonce_id = ".$annonceId;
         $rs   = $cnx->query($sql);
         $res  = $rs->fetchAll();
         $tabPhotoOld = array();
         foreach($res as $item){
             $tabPhotoOld[] = $item->photo_id;
         }
         sort($tabPhotoOld);
         return $tabPhotoOld;
     }
     
     /*
      * Vérifier si modif formule ou choix
      */
     public static function checkFormuleChoicesChange($idOccasion,$idFormuleChoisie,$newChoix){
         $valModifFle = 2 ;
         $cnx = jDb::getConnection();
         $choixOld = "";
         
         jClasses::inc('annonce~annonceFormuleSrv');
         jClasses::inc('commun~common');
         
         //formule
         $idFormule = annonceFormuleSrv::getAnnonceFormuleByAnnonce($idOccasion);
         if(!$idFormule){
             $voiture   = common::chargeParId($idOccasion, "ao_voiture_occasion");
             $idFormule = annonceFormuleSrv::getFormuleFromOldDatas ($voiture->Occas_Reference);
         }
         if($idFormule != $idFormuleChoisie) $valModifFle += 2;
         
         //option
         if($newChoix != "") $valModifFle += 3;
         
         //MAJ dans la base si changement
         if($valModifFle != 2){
            $sql = "UPDATE ao_save_changes
                      SET modifFormule = '".$valModifFle."'
                      WHERE idOccasion = ".$idOccasion;
            $cnx->exec($sql);
         }
         
         /*
          * valmodifFle :
          *     2  -> pas de changement
          *     4  -> modif formule
          *     5  -> modif choix
          *     7  -> les deux modif
          */
         
     }
     
     /*
      * Supprimer les traces de modification
      */
     public static function deleteChangesSaved($idOccasion){
         $cnx = jDb::getConnection();
         $sql = "DELETE FROM ao_save_changes WHERE idOccasion = ".$idOccasion;
         $cnx->exec($sql);
     }
}